//package com.gitee.techstack.log.converter;
//
//import ch.qos.logback.classic.LoggerContext;
//import ch.qos.logback.classic.pattern.MessageConverter;
//import ch.qos.logback.classic.spi.ILoggingEvent;
//import lombok.Data;
//import lombok.extern.slf4j.Slf4j;
//import org.slf4j.LoggerFactory;
//
//import java.util.ArrayList;
//import java.util.List;
//import java.util.Map;
//import java.util.regex.Pattern;
//
///**
// * ┏┓　　　┏┓
// * ┏┛┻━━━┛┻┓
// * ┃　　　　　　　┃
// * ┃　　　━　　　┃
// * ┃　┳┛　┗┳　┃
// * ┃　　　　　　　┃
// * ┃　　　┻　　　┃
// * ┃　　　　　　　┃
// * ┗━┓　　　┏━┛
// * 　　┃　　　┃神兽保佑
// * 　　┃　　　┃代码无BUG！
// * 　　┃　　　┗━━━┓
// * 　　┃　　　　　　　┣┓
// * 　　┃　　　　　　　┏┛
// * 　　┗┓┓┏━┳┓┏┛
// * 　　　┃┫┫　┃┫┫
// * 　　　┗┻┛　┗┻┛
// *
// * @author Yeoman
// * @description
// * @create 2020/5/9 上午11:32
// **/
//@Slf4j
//public class DesensitizationMessageConverter extends MessageConverter {
//    private static volatile List<RuleConfig> configList;
//
//    @Override
//    public String convert(ILoggingEvent event) {
//        initRuleConfig();
//        return doConvert(event);
//    }
//
//    /**
//     * 初始化规则配置
//     */
//    private void initRuleConfig() {
//        if (configList == null) {
//            synchronized (DesensitizationMessageConverter.class) {
//                if (configList == null) {
//                    configList = new ArrayList<>();
//                    Map<String, String> propertyMap = ((LoggerContext) LoggerFactory.getILoggerFactory()).getCopyOfPropertyMap();
//                    for (String s : propertyMap.keySet()) {
//                        if (s.startsWith("RULE_REG_")) {
//                            String[] array = propertyMap.get(s).split("&");
//                            if (array != null && array.length == 2) {
//                                configList.add(new RuleConfig(array[0], array[1]));
//                            }
//                        }
//                    }
//                    log.info("desensitization rule config init end ! ");
//                }
//            }
//        }
//    }
//
//    /**
//     * 日志内容转换
//     *
//     * @param event
//     * @return
//     */
//    private String doConvert(ILoggingEvent event) {
//        String result = event.getFormattedMessage();
//        if (configList != null) {
//            for (RuleConfig ruleConfig : configList) {
//                result = ruleConfig.apply(result);
//            }
//        } else {
//            result = super.convert(event);
//        }
//        return result;
//    }
//
//    @Data
//    private class RuleConfig {
//        private String reg;
//        private String replacement;
//
//        RuleConfig(String reg, String replacement) {
//            this.reg = reg;
//            this.replacement = replacement;
//        }
//
//        String apply(String message) {
//            return Pattern.compile(reg).matcher(message).replaceAll(replacement);
//        }
//    }
//}
